
-----------------------------------------------------------
uTurtleBot3 (Micro TurtleBot3) class Release Notes (v2a)
-----------------------------------------------------------

Industrial Robotics | Fundamentals of Robotics and Bionics
Department of Mechanical Engineering
University of Coimbra, Portugal

Pedro Martins
Department of Mechanical Engineering
University of Coimbra, Portugal
pedro.martins@dem.uc.pt
October/2025

# ----------------------------------------------------------------------------- 
# Overview of Available Methods
# ----------------------------------------------------------------------------- 

# ---------------------------
## --- Constructor --- 
# ---------------------------
tbot = TurtleBot3();
tbot = uTurtleBot3( dt );

# ---------------------------
## --- Query system ---
# ---------------------------
% get version number
vs = tbot.getVersion(); 

% get wheel baseline (distance between wheels) [in meters]
baseline = tbot.getWheelBaseline();

% get wheel radius [in meters]
radius = tbot.getWheelRadius();

% get the Instantaneous Center of Curvature (ICC) radius [in meters]
radius = tbot.getICCRadius();

% get the Instantaneous Center of Curvature (ICC) coordinates and radius [in meters] 
[iccx, iccy, radius] = tbot.getICC();

# ---------------------------
## --- Robot control ---
# ---------------------------
% send linear and angular velocity commands to robot  
tbot.setVelocity(v, w);

% stop robot 
tbot.stop();

% read 2D pose + timestamp
[x, y, theta, ptimestamp] = tbot.readPose();

% read 2D pose + timestamp (overload of readPose)
[x, y, theta, ptimestamp] = tbot.getPose();

% define/overwrite pose of robot 
tbot.setPose(x, y, theta);

% reset pose: (x,y,theta) = (0,0,0) 
tbot.resetPose();

# ---------------------------
## --- Read sensors ---
# ---------------------------

% read LIDAR data
[lddata, ldtimestamp, scanMsg] = tbot.readLIDAR();

% read LIDAR data (overload of readLIDAR)
[lddata, ldtimestamp, scanMsg] = tbot.getLIDAR();

% in of range LIDAR data indexs (obstacles)
[vidx] = tbot.getInRangeLIDARIdx(lddata, maxRange);

% out of range LIDAR data indexs (free angles)
[nidx] = tbot.getOutRangeLIDARIdx(lddata, maxRange);

# ---------------------------
## --- Place 3D Objects ---
# ---------------------------

% Load Virtual Map (2D occupation grid) 
tbot.loadVirtualMap(map, mscale)

% Load Virtual Map (2D occupation grid) from image file
tbot.loadVirtualMapImage(filename)

% Get the internal 2D Virtual Map of rasterized objects 
[vmap, mscale] = tbot.getVirtualMap();

% place 3D cube in 2D Virtual Map
tbot.uPlace3DCube(x, y, orientation, edgeSize);

% place 3D cylinder in 2D Virtual Map
tbot.uPlace3DCylinder(x, y, radius);

% place 3D cardboard box in 2D Virtual Map
tbot.uPlace3DCardboardBox(x, y, orientation);




# ----------------------------------------------------------------------------- 
# Versions Update Notes
# ----------------------------------------------------------------------------- 

# ------------------------------------- 
# v02a (30/10/2025) 
# ------------------------------------- 

- new demos: udemoLIDAR.m and udemoPlaceObjects.m 
- place 3D objects (cube, cylinder, cardboard box) by 2D rasterization into the virtual map    
- in range/ out range LIDAR data index extraction: getInRangeLIDARIdx(.) and  getOutRangeLIDARIdx(.).
- added basic LIDAR funcionality + noise.
- added virtual 2D map: loadVirtualMap(.), loadVirtualMapImage(.) and getVirtualMap();
- version history


# ------------------------------------- 
# v01c (02/10/2025) 
# ------------------------------------- 

v01d - update readLIDAR(.) + maps interface: uloadMap(.) + uloadMapImage(.)
v01c - uTurtleBot3 core based in DiffDrive interface
v01b - added odometry_update(.), getICC(.) and getICCRadius(.) 
v01a - initial basic components

